WorkManager দিয়ে Background Tasks পরিচালনা
WorkManager হল Android এ ব্যাকগ্রাউন্ড টাস্ক সম্পন্ন করার একটি শক্তিশালী এবং নির্ভরযোগ্য API, যা বিশেষভাবে দীর্ঘস্থায়ী এবং নির্ধারিত কাজের জন্য ব্যবহৃত হয়। এটি এমন টাস্ক ম্যানেজ করতে ব্যবহৃত হয়, যা নির্দিষ্ট শর্ত পূরণ হলে (যেমন নেটওয়ার্ক অ্যাক্সেস, ডিভাইস চার্জিং) সম্পন্ন করতে হয়। WorkManager এমন কাজের জন্য আদর্শ, যেগুলি অ্যাপ ক্লোজ হওয়ার পরেও চলতে থাকে এবং অ্যাপ রিস্টার্টের পরেও কাজ করে।
WorkManager এর প্রধান বৈশিষ্ট্য
- Reliable Execution: WorkManager নির্ভরযোগ্যভাবে কাজ সম্পন্ন করে, এমনকি ডিভাইস রিস্টার্টের পরেও।
- Chainable Work: আপনি একাধিক কাজ একে অপরের সাথে চেইন করতে পারেন, অর্থাৎ এক কাজ শেষ হলে আরেক কাজ শুরু হবে।
- Constraints: WorkManager কাজ সম্পন্ন করার জন্য নির্দিষ্ট শর্তাবলী সেট করতে দেয়, যেমন নেটওয়ার্ক কানেকশন, ডিভাইস চার্জিং।
- Lifecycle-aware: WorkManager Android Lifecycle এর সাথে সামঞ্জস্যপূর্ণ, তাই এটি নিরাপদ এবং উন্নত পারফরম্যান্স প্রদান করে।
WorkManager সেটআপ করা
WorkManager ব্যবহার করতে হলে নিচের ধাপগুলো অনুসরণ করতে হবে।
ধাপ ১: গ্রেডেল ডিপেন্ডেন্সি যোগ করা
build.gradle (Module: app) ফাইলে WorkManager এর ডিপেন্ডেন্সি যোগ করতে হবে:
dependencies {
implementation "androidx.work:work-runtime:2.8.1"
}
ধাপ ২: Worker ক্লাস তৈরি করা
WorkManager এ ব্যাকগ্রাউন্ড টাস্ক পরিচালনা করতে একটি Worker ক্লাস তৈরি করতে হবে। Worker ক্লাসে আপনি আপনার কাজের লজিক ইমপ্লিমেন্ট করবেন।
ExampleWorker.java:
import android.content.Context;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
public class ExampleWorker extends Worker {
public ExampleWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
// ব্যাকগ্রাউন্ড কাজের লজিক
Log.d("ExampleWorker", "Background work is running");
// কাজের শেষে Result রিটার্ন করা
return Result.success();
}
}
ধাপ ৩: Worker শিডিউল করা
MainActivity.java:
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import androidx.work.OneTimeWorkRequest;
import androidx.work.WorkManager;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button startWorkButton = findViewById(R.id.startWorkButton);
startWorkButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// OneTimeWorkRequest তৈরি করা
OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(ExampleWorker.class).build();
// WorkManager এর মাধ্যমে কাজ শুরু করা
WorkManager.getInstance(getApplicationContext()).enqueue(workRequest);
}
});
}
}
Layout (activity_main.xml):
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<Button
android:id="@+id/startWorkButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Start Work"/>
</LinearLayout>
কোডের ব্যাখ্যা:
- Worker:
ExampleWorkerক্লাসেdoWork()মেথডে ব্যাকগ্রাউন্ড টাস্কের লজিক ইমপ্লিমেন্ট করা হয়েছে। এটি একটি ব্যাকগ্রাউন্ড থ্রেডে চলে এবং কাজের শেষেResult.success()রিটার্ন করে। - WorkRequest:
OneTimeWorkRequestএকটি একবার চলা টাস্কের জন্য ব্যবহৃত হয়। আপনি যদি নির্দিষ্ট শর্তে বা পুনরাবৃত্তিমূলক কাজ চান, তাহলে PeriodicWorkRequest ব্যবহার করতে পারেন। - WorkManager: WorkManager API ব্যবহার করে WorkRequest শুরু করা হয়েছে।
ধাপ ৪: Constraints এবং InputData যোগ করা
আপনি WorkManager এ কাজ সম্পন্ন করার জন্য নির্দিষ্ট শর্ত (Constraints) যোগ করতে পারেন। উদাহরণস্বরূপ, নেটওয়ার্ক অ্যাক্সেস এবং ডিভাইস চার্জিং কন্ডিশন যোগ করা:
import androidx.work.Constraints;
import androidx.work.NetworkType;
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresCharging(true)
.build();
OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(ExampleWorker.class)
.setConstraints(constraints)
.build();
ধাপ ৫: Periodic Work সেট করা
কিছু কাজ বারবার চালানোর জন্য PeriodicWorkRequest ব্যবহার করা হয়:
import androidx.work.PeriodicWorkRequest;
import java.util.concurrent.TimeUnit;
PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(ExampleWorker.class, 15, TimeUnit.MINUTES)
.setConstraints(constraints)
.build();
WorkManager.getInstance(getApplicationContext()).enqueue(periodicWorkRequest);
Note: PeriodicWorkRequest সর্বনিম্ন ১৫ মিনিটের জন্য শিডিউল করা যায়। ১৫ মিনিটের কম সময়ের জন্য পুনরাবৃত্তিমূলক কাজ শিডিউল করা যায় না।
WorkManager এর Best Practices
- Lifecycle-aware কাজ: WorkManager ব্যাকগ্রাউন্ড টাস্ককে Lifecycle-aware করে তোলে, তাই এটি Activity বা Fragment ধ্বংস হলে কাজ চালিয়ে যেতে পারে।
- কাজ Cancel করা: WorkManager এর মাধ্যমে চলমান কাজ সহজে cancel করা যায়:
WorkManager.getInstance(getApplicationContext()).cancelWorkById(workRequest.getId());
- চেইনিং: WorkManager এর মাধ্যমে একাধিক কাজ একে অপরের পরপর (চেইনিং) বা প্যারালেলে চালানো যায়।
WorkManager.getInstance(getApplicationContext())
.beginWith(workRequest1)
.then(workRequest2)
.enqueue();
- Constraints ব্যবহার: ডিভাইসের অবস্থা (যেমন নেটওয়ার্ক কানেকশন, চার্জিং) অনুযায়ী কাজ শিডিউল করা।
WorkManager এর সুবিধা
| সুবিধা | বিস্তারিত |
|---|---|
| Reliable Execution | ডিভাইস রিস্টার্টের পরেও কাজ সম্পন্ন হয়। |
| Lifecycle-aware | কাজ অ্যাপ্লিকেশনের লাইফসাইকেল অনুযায়ী পরিচালনা হয়। |
| Chaining এবং Constraints | একাধিক কাজ চেইন করা এবং নির্দিষ্ট শর্তে কাজ করা। |
| API Compatibility | WorkManager পুরোনো API লেভেলগুলোতেও কাজ করে। |
উপসংহার
WorkManager হল Android এ ব্যাকগ্রাউন্ড টাস্ক সম্পন্ন করার একটি নির্ভরযোগ্য এবং কার্যকরী পদ্ধতি। এটি নির্দিষ্ট শর্ত এবং লাইফসাইকেল ম্যানেজমেন্টের সাথে ব্যাকগ্রাউন্ড কাজ চালানোর জন্য উপযুক্ত। বড় বা দীর্ঘস্থায়ী কাজের জন্য WorkManager AsyncTask এর চেয়ে বেশি কার্যকর, কারণ এটি ডিভাইস রিস্টার্টের পরেও কাজ চালিয়ে যেতে পারে এবং ব্যাকগ্রাউন্ডে কাজ নির্ভরযোগ্যভাবে সম্পন্ন করে।
Read more